#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QSerialPortInfo>
#include <QSerialPort>
#include <QMessageBox>
#include <QFileDialog>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QPlainTextEdit>
#include <QScrollBar>
#include <QDateTime>
#include <QLineEdit>

#include <QNetworkInterface>
#include <QStringList>

#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
#include <QDialog>
#include <QVBoxLayout>
#include <QLabel>
#include <QTimer>
#include <QFont>

#include "ui_mainwindow.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void msgbox(QString text);
    /*************************************************************************************/
    // 串口操作
    void ReflashSerialPort(void);
    int OpenSerial(QString com, QString baud, QString databit, QString stopbit, QString paritybit);
    int CloseSerial();
    void SerialRead(void);
    void SerialWrite(QString *data);

    // 隐藏多次发送
    void HideMultiSend(bool arg);

    // 修改接收区指定字符串颜色
    void ChangeReceivePlainTextEditSubStringColor(QPlainTextEdit *Receive_TextEdit, QLineEdit *Find_lineEdit);

    // 恢复接收区所有字符的颜色
    void ChangeReceivePlainTextEditAllStringColor(QPlainTextEdit *Receive_TextEdit);

    /*************************************************************************************/
    bool TcpServerStart(QString IP, int port);

    void SaveIpToBox(void);

    void listLocalIPs(void);

private slots:
    // 信号
    void SerialFindString(const QString &text);
    void NetWorkFindString(const QString &text);
    void onNewConnection();
    void NetWorkReadyRead();
    void onReadyWrite();
    void onTcpSocketConnect(QAbstractSocket::SocketState state);

    // 槽
    void on_FindSerial_btn_clicked();

    void on_CleanReceive_btn_clicked();

    void on_OpenSerial_btn_clicked();

    void on_CloseSerial_btn_clicked();

    void on_SaveReceive2File_btn_clicked();

    void on_Send_btn_clicked();

    void on_multi_send_stateChanged(int arg);

    void on_Clean_btn_clicked();

    void on_Send_btn_1_clicked();

    void on_Clean_btn_1_clicked();

    void on_Send_btn_2_clicked();

    void on_Clean_btn_2_clicked();

    void on_Send_btn_3_clicked();

    void on_Clean_btn_3_clicked();

    void on_Send_btn_4_clicked();

    void on_Clean_btn_4_clicked();

    void on_Send_btn_5_clicked();

    void on_Clean_btn_5_clicked();

    void on_Send_btn_6_clicked();

    void on_Clean_btn_6_clicked();

    void on_Send_btn_7_clicked();

    void on_Clean_btn_7_clicked();

    void on_Send_btn_8_clicked();

    void on_Clean_btn_8_clicked();

    void on_SelectFile_btn_clicked();

    void on_Find_checkBox_stateChanged(int arg);

    void on_Lisen_btn_clicked();

    void on_NetSend_btn_clicked();

    void on_CleanNetReceive_btn_clicked();

    void on_ChoseFile_btn_clicked();

    void on_NetCleanSend_btn_clicked();

    void on_NetMode_comboBox_activated(const QString &arg);

    void on_NextWorkFind_checkBox_stateChanged(int arg);

private:
    Ui::MainWindow *ui;
    QSerialPort *serial;
    QDateTime LastSerialReadTime;
    int SerialRXTolalCnt=0;
    int SerialTXTolalCnt=0;
    int NetWorkRXTolalCnt=0;
    int NetWorkTXTolalCnt=0;
    QTcpServer *TcpServer;
    QTcpSocket *TcpSocket;
};
#endif // MAINWINDOW_H
